//function fileUpload(webpath,imgpath,fileList,filePickerId,json){
function fileUpload(jsonObjs){	
	
	var $webPath,$imgPath,$list,$filePickerId,$json=[];
	var $maxLimit,$multiple,$upLoaderNum,$sucessNum,$errorNum;
	var $objName,$showName,$showPath,$showDelBtn,$ratio;
	var $thumbnailWidth,$thumbnailHeight;
	var $tempClick =1;
	 // Web Uploader实例
	var uploader;
	var $successcallback;
	
//	var webpath = jsonObjs.webpath;
//	var imgpath = jsonObjs.imgpath;
//	var fileList = jsonObjs.fileList;
//	var filePickerId = jsonObjs.filePickerId;
//	var json = jsonObjs.json;
	//初始化div数据
	init();
	
	function init(){
		$webPath = jsonObjs.webPath;//文件路径
		$imgPath = jsonObjs.imgPath;//图片路径
        $list = jsonObjs.fileList;
        $filePickerId = jsonObjs.filePickerId;
        $json = jsonObjs.json;
        
        if(typeof jsonObjs.successcallback=='function'){
        	$successcallback=jsonObjs.successcallback;
		} 
        
        $maxLimit = !(jsonObjs.maxLimit)?300:jsonObjs.maxLimit;//最多只能上传照片数（默认选择300张)
        $multiple = uploadStr2Bool(jsonObjs.multiple,"true");//是否是多张照片模式(新的代替旧的)
        $upLoaderNum = 0;//总上传张数
        $sucessNum=0;//上传成功数
        $errorNum = 0;//上传失败数
        
       
        $objName = !(jsonObjs.objName)?"objJson":fileList.objName; //对象名称，如果为空默认为objJson。
        $showName = uploadStr2Bool(jsonObjs.showName,"true");//上传成功后是否需要显示名称（后期看情况重新设默认值)
        $showPath = uploadStr2Bool(jsonObjs.showPath,"true");//上传成功后是否需要显示路径（后期看情况重新设默认值)
    	$showDelBtn = uploadStr2Bool(jsonObjs.showDelBtn,"true");//上传成功后是否需要显示删除按钮
    	$ratio = window.devicePixelRatio || 1;// 优化retina, 在retina下这个值是2
        
        // 缩略图大小
        $thumbnailWidth = 100 * $ratio;
        $thumbnailHeight = 100 * $ratio;
	}
      

    // 初始化Web Uploader
    uploader = WebUploader.create({

        // 自动上传。
        auto: true,

        // swf文件路径
        swf:  webRoot()+'/js/plugins/webuploader/dist/Uploader.swf',
        //swf:'http://localhost:8080/imall/resources/js/webuploader/Uploader.swf',

        // 文件接收服务端。
        server: $webPath+'/api/seller/fexUpload.htm?'+$.param(setFullParameter({})),

        // 选择文件的按钮。可选。
        // 内部根据当前运行是创建，可能是input元素，也可能是flash.
        pick: {
        	id : $filePickerId,
        	//判断是否可以多选
        	multiple :  $multiple
        },
        //最大上传数
        fileNumLimit:$maxLimit,
        fileSingleSizeLimit:2*1024*1024,
        // 只允许选择文件，可选。
        accept: {
            title: 'Images',
            extensions: 'gif,jpg,jpeg,bmp,png',
            mimeTypes: 'image/*'
        },
        //不压缩
        compress:false
    });


    // 当有文件添加进来的时候
    uploader.on('fileQueued', function( file ) {
    	
    	var imgDiv = "";
    	imgDiv ="<div id='img'"+file.id +" width='100' height='100'></div>";
    	
    	var showMove = true;
    	
    	var leftBtnDiv = "";
    	if(showMove==true){
    		leftBtnDiv = "<div id='left'"+file.id+" class='operate left'>左移</div>";
    	}
    	
    	
    	var  rightBtnDiv = "";
    	if(showMove==true){
    		rightBtnDiv = "<div id='right'"+file.id+" class='operate right'>右移</div>";
    	}
    		
    	 var topBtnDiv = "";
    	 if(showMove==true){
    		 topBtnDiv = "<div id='top'"+file.id+" class='operate top'>上移</div>";
    	 }
    		 
    	 var bottomBtnDiv = "";
    	 if(showMove==true){
    		 bottomBtnDiv = "<div id='bottom'"+file.id+" class='operate bottom'>下移</div>";
    	 }
    	//是否显示删除按钮
    	var showDelBtnDiv = "";
		if($showDelBtn==true){
			showDelBtnDiv = "<div id='del'"+file.id+" class='operate del'>删除</div>";
		}
    	
		//是否显示名称
    	var showNameDiv = "";
    	if($showName==true){
    		showNameDiv = "<div class='info' id='info'"+file.id+">" + file.name + '</div>' ;
    	}
    	
    	var showPathDiv = "";
    	if($showPath==true){
    		showPathDiv = "<div id='path_"+file.id+"'></div>";
    	}
    	
        var $li = $(
                '<div id="' + file.id + '" class="file-item thumbnail">' +
                    '<img id="img_'+file.id+'">' +
                    showNameDiv +                  
                    showPathDiv+
                    '<div class="file-panel">'+
                    //topBtnDiv+
                    //bottomBtnDiv+
                    leftBtnDiv+
                    rightBtnDiv+
                    showDelBtnDiv +
                    '</div>'+
                '</div>'
                ),
                
            $img = $li.find('img');
        
        $li.on('click', '.del', function() {
        	uploader.removeFile( file,true );
            
            for (var i=0;i<$json.length;i++){
            	var jsonObj = $json[i];
            	if(jsonObj.fileId==file.id){
            		$json.splice(i,1);
            		//fileList.attr("json",json);
            		break;
            	}
            }
            $(this).parent().parent().remove();
        });
        
        //上移
        $li.on('click', '.top', function() {
        	for (var i=0;i<$json.length;i++){
            	var jsonObj = $json[i];
            	if(jsonObj.fileId==file.id){
            	//	$json.splice(i,1);
            		//fileList.attr("json",json);
            		if(i<5){
            			alert("已经是第一行了");
            			return;
            		}
            		var arr = $list.children().toArray();
            	    var temp;
            	    // 1 3对调
            	    temp = arr[i];
            	    arr[i] = arr[i-5];
            	    arr[i-5] = temp;
            	    
            	    temp = $json[i];
            	    $json[i] = $json[i-5];
            	    $json[i-5] =temp ;
            	   
            	    for (var j=0;j<arr.length;j++){
            	    	$list.append($(arr[j]));
            	    }
            	    
            		break;
            	}
            }
        });
        
      //下移
        $li.on('click', '.bottom', function() {
        	for (var i=0;i<$json.length;i++){
            	var jsonObj = $json[i];
            	if(jsonObj.fileId==file.id){
            	//	$json.splice(i,1);
            		//fileList.attr("json",json);
            		if(i>($json.length-5)){
            			alert("已经是最后一行了");
            			return;
            		}
            		var arr = $list.children().toArray();
            	    var temp;
            	    // 1 3对调
            	    temp = arr[i];
            	    arr[i] = arr[i+5];
            	    arr[i+5] = temp;
            	    
            	    temp = $json[i];
            	    $json[i] = $json[i+5];
            	    $json[i+5] =temp ;
            	   
            	    for (var j=0;j<arr.length;j++){
            	    	$list.append($(arr[j]));
            	    }
            	    
            		break;
            	}
            }
        });
        
        //左移
        $li.on('click', '.left', function() {
        	var len = $json.length;
        	var arr = $list.children().toArray();
        	for (var i=0;i<len;i++){
            	var jsonObj = $json[i];
            	if(jsonObj.fileId==file.id){
            	//	$json.splice(i,1);
            		//fileList.attr("json",json);
            		if(i==0){
            			alert("已经是第一个了");
            			return;
            		}
            		
            	    var temp;
            	    // 1 3对调
            	    temp = arr[i];
            	    arr[i] = arr[i-1];
            	    arr[i-1] = temp;
            	    
            	    temp = $json[i];
            	    $json[i] = $json[i-1];
            	    $json[i-1] =temp ;
            	   
            	   
            		break;
            	}
            }
        	var arrLen = arr.length;
        	 for (var j=0;j<arrLen;j++){
     	    	$list.append($(arr[j]));
     	    }
        });
        
        //右移
        $li.on('click', '.right', function() {
//        	if($tempClick==0){
//        		return;
//        	}
        	var arr = $list.children().toArray();
        	var len = $json.length;
        	for (var i=0;i<len;i++){
            	var jsonObj = $json[i];
            	if(jsonObj.fileId==file.id){
            	//	$json.splice(i,1);
            		//fileList.attr("json",json);
            		$tempClick=0;
            		if(i==$json.length-1){
            			alert("已经是最后一个了");
            			return;
            		}
            		
            	    var temp;
            	    // 1 3对调
            	    temp = arr[i];
            	    arr[i] = arr[i+1];
            	    arr[i+1] = temp;
            	    
            	    temp = $json[i];
            	    $json[i] = $json[i+1];
            	    $json[i+1] =temp ;
            	    break;
            	}
            }
        	var j=0;
        	var arrLen = arr.length;
        	for (j=0;j<arrLen;j++){
    	    	$list.append($(arr[j]));
    	    }
    	    
    		
        });
        
        //如果是单张模式，则清空div数据
        if($multiple==false){
        	$list.empty()
        	uploader.removeFile( file,true );
            for (var i=0;i<$json.length;i++){
            	var jsonObj = $json[i];
            	if(jsonObj.fileId==file.id){
            		$json.splice(i,1);
            	//	fileList.attr("json",json);
            		break;
            	}
            }
        };  
       
        $list.append( $li );

        // 创建缩略图
        uploader.makeThumb( file, function( error, src ) {
            if ( error ) {
                $img.replaceWith('<span>不能预览</span>');
                return;
            }

           // $img.attr( 'src', src );
        }, $thumbnailWidth, $thumbnailHeight );
        
        $upLoaderNum++;
       // fileList.attr("upLoaderNum",$upLoaderNum);
        
        
        
    });

    // 文件上传过程中创建进度条实时显示。
    uploader.on( 'uploadProgress', function( file, percentage ) {
        var $li = $( '#'+file.id ),
            $percent = $li.find('.progress span');

        // 避免重复创建
        if ( !$percent.length ) {
            $percent = $('<p class="progress"><span></span></p>')
                    .appendTo( $li )
                    .find('span');
        }

        $percent.css( 'width', percentage * 100 + '%' );
    });

    // 文件上传成功，给item添加成功class, 用样式标记上传成功。
    uploader.on( 'uploadSuccess', function( file,data ) {
    	var $li=$list.find('.file-item');
    	var $img = $li.find('#img_'+file.id);
    	if(data.code==200){
        	var path = $imgPath+data.data.path+data.data.ext;
        	var imgName = data.data.path+data.data.ext;
        	$img.attr('src',path);
        	$img.attr('width',100);
        	$img.attr('height',100);
        	var id=$list.attr("type");
        	//var jsonObj = eval("data." + $objName);
        	jsonObj = data.data;
        	jsonObj.fileId = file.id;
//        	jsonObj.num = $sucessNum; 
//        	jsonObj.fileId = file.id;
//            $( '#'+file.id ).addClass('upload-state-done');
//            $("#path_"+file.id).html("<font color='red'>"+response._raw+"</font>");
            $json.push(jsonObj);
//            //json.push(response.[$objName]);
//            //fileList.attr("json",json);
//            $sucessNum++;
    	}else{
    		$list.find('.file-item:last').remove();
    		uploader.removeFile( file,true );
    		alert("上传失败!");
    	}

        
    });

    // 文件上传失败，现实上传出错。
    uploader.on( 'uploadError', function( file ) {
        var $li = $( '#'+file.id ),
            $error = $li.find('div.error');

        // 避免重复创建
        if ( !$error.length ) {
            $error = $('<div class="error"></div>').appendTo( $li );
        }

        $error.text('上传失败');
    });

    // 完成上传完了，成功或者失败，先删除进度条。
    uploader.on( 'uploadComplete', function( file ) {
        $( '#'+file.id ).find('.progress').remove();
    });
    
    //当文件上传结束后触发。
    uploader.on('uploadFinished',function(file){
    	//fileList.attr("json",json);
    	var arr =uploader.getFiles();
    	
    	var len = arr.length;
    	var $tempJson = [];
    	
    	for (var i=0;i<len;i++){
    		var jsonLen = $json.length;
    		for(var j=0;j<jsonLen;j++){
    			if($json[j].fileId==arr[i].id){
    				$tempJson[i] = $json[j];
    				break;
    			}
    			
    		}
    	}
    	
    	/*for (var i=0;i<$tempJson.length;i++){
    		$json[i] = $tempJson[i];
    	}*/
    	$json = $tempJson.slice(0); 
    	$tempJson.length = 0; 
    	if($successcallback){
    		$successcallback($json);
    	}
    });
    
     uploader.on( 'error', function( tt,file ) {
    	
    	if(tt=='Q_TYPE_DENIED'){
    		alert("文件"+file.name+"格式不对");
		}else if(tt=='Q_EXCEED_SIZE_LIMIT'){
			alert("文件超过大小限制2M");
		}else if(tt=='F_DUPLICATE'){
			alert("文件"+file.name+"重复!");
		}else if(tt=='F_EXCEED_SIZE'){
			alert("上传失败!文件太大！不能超过2M");
		}else{
			alert(file.name+"上传失败! ");
		}
    	
    });

    
    function moveStep(){
    	
    }

}

/**
 * 基础参数
 * deafautBtn: 按钮  attr: {upPath:上传路径,pickWidth:按钮宽,pickHeight:按钮高,pickLabel:按钮文字,pickCss:按钮css 样式,maxLimit:最大文件数,fex_multiple:是否多张 } （必须）
 * upBasePath:上传根路径 （必须 二选一）
 * imgPath:图片根路径 （不需要）
 * 
 * 
 * 回调参数
 * successcallback:  文件上传成功，给item添加成功class, 用样式标记上传成功 （file,data）
 * queuedcallback : 当有文件添加进来的时候  （data）
 * errorcallback: 文件上传失败，现实上传出错 （data）
 * beforecallback: 当文件被加入队列之前触发（data）
 * completecallback: 完成上传完了，成功或者失败，先删除进度条 （data）
 * 
 * 
 * 
 * 
   下面例子：
 		  	var upLoaderOptions1={
					deafautBtn : '#filePicker',
					upBasePath : '$!webPath',
					successcallback:function(file,data){alert(data.data.path+data.data.ext);
			        	var path=data.data.path+data.data.ext;
			        	$('#img_url_box input').val(path);
			        	$('#img_url_box img').attr('src','$!{imgroot}'+path);
			        	$('#img_url_box').show();
					}
			}
	 		 fileUpload2( upLoaderOptions1);
 */
function fileUpload2(objJsons){
	if(!objJsons){
		return;
	}
	var $deafautBtn,$btnId,$upBasePath,$upPath,$imgPath,$maxLimit,$multiple,$pickWidth,$pickHeight,$pickCss,$pickLabel;
	 var $ratio;
	 var uploader;
	 var $successcallback,$queuedcallback,$errorcallback,$beforecallback,$completecallback;
	 init();
	function init(){
		if(typeof objJsons.successcallback=='function'){
			$successcallback=objJsons.successcallback;
		} 
		if(typeof objJsons.queuedcallback=='function'){
			$queuedcallback=objJsons.queuedcallback;
		} 
		if(typeof objJsons.errorcallback=='function'){
			$errorcallback=objJsons.errorcallback;
		} 
		if(typeof objJsons.beforecallback=='function'){
			$beforecallback=objJsons.beforecallback;
		} 
		if(typeof objJsons.completecallback=='function'){
			$completecallback=objJsons.completecallback;
		} 
		if(objJsons.upBasePath){
			$upBasePath = objJsons.upBasePath;
		}else{
			$upBasePath = objJsons.upPath;
		}
		$imgPath = objJsons.imgPath;
		$deafautBtn=objJsons.deafautBtn;
		var _btnParam=$($deafautBtn);
		if(_btnParam.attr("upPath")){
			$upPath = _btnParam.attr("upPath");
		}else{
			$upPath ='/seller/fex_upload.htm';
		}
		$pickWidth=_btnParam.attr("pickWidth");
		$pickHeight=_btnParam.attr("pickHeight");
		$pickLabel=_btnParam.attr("pickLabel");
		if(!$pickLabel){
			$btnId=$deafautBtn;
		}
		$pickCss=_btnParam.attr("pickCss");
		$maxLimit = !(_btnParam.attr("maxLimit"))?300:_btnParam.attr("maxLimit");//最多只能上传照片数（默认选择300张)
		$multiple = uploadStr2Bool(_btnParam.attr("fex_multiple"),"false");//是否是多张模式（true 可上传多张，false 传单张)
		$ratio = window.devicePixelRatio || 1;// 优化retina, 在retina下这个值是2
	}

    if ( !WebUploader.Uploader.support() ) {
        alert( 'Web Uploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器');
        throw new Error( 'WebUploader does not support the browser you are using.' );
    }
	// Web Uploader实例
	uploader=WebUploader.create({
	        // 自动上传。
	        auto: true,
	        // 不压缩image
	        resize: false,
	        // swf文件路径
	        swf: $upBasePath+'/dist/resources/libs/webupload/dist/Uploader.swf',
	        // 文件接收服务端。
	       // server: upPath+'/save_clearnace_upload.htm',
	        server:$upBasePath+$upPath,
	        // 选择文件的按钮。可选。
	        // 内部根据当前运行是创建，可能是input元素，也可能是flash.
	        pick: {
	        	id:$deafautBtn,
	        	btnId:$btnId,
	        	label:$pickLabel,
	        	css:$pickCss,
	        	//label: '<span style="display:block:width: 301px; height: 201px;">点击选择图片</span>',
	        	//css:"tst-css",
	        	//是否显示多张
	        	multiple:$multiple,
	        	pickWidth:$pickWidth,
	        	pickHeight:$pickHeight
	        },
	        fileSingleSizeLimit:2*1024*1024,
	        //最大上传数
	        fileNumLimit:$maxLimit,
	        // 只允许选择文件，可选。
	        accept: {
	            title: 'Images',
	            extensions: 'gif,jpg,jpeg,bmp,png',
	            mimeTypes: 'image/*'
	        }
	    });
		//当文件被加入队列之前触发
		uploader.on('beforeFileQueued',function(file){
			if($beforecallback){
				$beforecallback(file);
			}else{
				if(file.size>2*1024*1024){
    				uploader.removeFile(file,true);
					alert("图片大小不能超过2M,请重新上传");
				}
			}
		});
	    // 当有文件添加进来的时候
	    uploader.on( 'fileQueued', function( file ) {
	    	if($queuedcallback){
	    		$queuedcallback(file);
	    	}
	    });
		// 文件上传成功，给item添加成功class, 用样式标记上传成功。
	    uploader.on( 'uploadSuccess', function(file,data) {
	    	if(data&&data._raw){
	    		/*var _raws=data._raw.split(',');
	    		if(_raws.length==2){
	    			if('0'==_raws[0]){
	    				uploader.removeFile(file,true);
	    				layer.msg("用户未登录,请刷新网页重新登录！");
	    				return;
	    			}else if('-1'==_raws[0]){
	    				uploader.removeFile(file,true);
	    				layer.msg("文件上传失败！");
	    				return;
	    			}else if('-2'==_raws[0]){
	    				uploader.removeFile(file,true);
	    				layer.msg("图片裁剪失败，换张图片试试！");
	    				return;
	    			}else if('-3'==_raws[0]){
	    				uploader.removeFile(file,true);
	    				layer.msg("文件超过规定范围！不能超过"+_raws[1]);
	    				return;
	    			}else if('-4'==_raws[0]){
	    				uploader.removeFile(file,true);
	    				layer.msg("图片裁剪失败,换张图片 试试!");
	    				return;
	    			}
	    		}*/
		    	if($successcallback){
	        		$successcallback(file,data);
	        	}
	    	}
	    });
	   // 文件上传失败，现实上传出错。
	    uploader.on( 'uploadError', function( file ) {
			uploader.removeFile(file,true);
	    	if($errorcallback){
	    		$errorcallback(file);
	    	}else{
	    		layer.msg("上传失败");
	    	}
	    });
	    // 完成上传完了，成功或者失败，先删除进度条。
	    uploader.on( 'uploadComplete', function( file ) {
	    	if($completecallback){
	    		$completecallback(file);
	    	}
	    });
		uploader.on('error',function(tt,file){
			if(tt=='Q_TYPE_DENIED'){
				layer.msg("照片格式不对");
			}else if(tt=='Q_EXCEED_SIZE_LIMIT'){
				layer.msg("图片超过大小限制2M");
			}else if(tt=='F_DUPLICATE'){
				layer.msg("文件重复!");
			}else if(tt=='F_EXCEED_SIZE'){
				layer.msg("上传失败! 文件太大！");
			}else{
				layer.msg("上传失败! "+tt);
			}
		});
		
		
		
		function uploadStr2Bool(value,defaultValue){
				if(null==value || (!value) || (value!="true" && value!="false")){
					if(defaultValue=="false"){
						return false;
					}else{
						return true;
					}
				}
				if(value=="false"){
					return false;
				}else if(value=="true"){
					return true;
				}
		} 
		
		return uploader;

}